﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using ProjControleDAL;
using ProjControleModelos;
namespace ProjControleBLL
{
    public class VendaBLL
    {
        VendasDAL objDAL;
        #region Métodos do Produto
        public void carregaListaProdutos(Venda objV)
        {
            Produtos_VendaBLL objProdVenda = new Produtos_VendaBLL();
            Produtos_Venda objPV = new Produtos_Venda();
            DataTable tab = null;
            try
            {
                tab = objProdVenda.localizar(objV);
                objV.lProdutos.Clear();
                foreach (DataRow linha in tab.Rows)
                {
                    objPV.cod_produto = int.Parse(linha["cod_produto"].ToString());
                    objPV.cod_venda = int.Parse(linha["cod_venda"].ToString());
                    objPV.qtd_produto = int.Parse(linha["qtd_produto"].ToString());
                    objPV.valor_produto = double.Parse(linha["val_produto"].ToString());
                    objV.lProdutos.Add(objPV);
                    objPV = new Produtos_Venda();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            objProdVenda = null;
            objPV = null;
        }
        public void cadastraProdVenda(Venda objV)
        {
            Produtos_VendaBLL objProdVenda;
            try
            {
                foreach (Produtos_Venda obj in objV.lProdutos)
                {
                    obj.cod_venda = objV.cod_venda;
                    objProdVenda = new Produtos_VendaBLL();
                    objProdVenda.inserir(obj);
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            objProdVenda = null;
        }
        public void carregaProdutos(Venda objV)
        {
            DataTable tab;
            Produtos_VendaBLL objProdVenda;
            Produtos_Venda objPV;
            try
            {
                objProdVenda = new Produtos_VendaBLL();
                objPV = new Produtos_Venda();
                tab = objProdVenda.localizar(objV);
                if (tab.Rows.Count > 0)
                {
                    objPV.cod_produto = int.Parse(tab.Rows[0]["cod_produto"].ToString());
                    objPV.qtd_produto = int.Parse(tab.Rows[0]["qtd_produto"].ToString());
                    objPV.valor_produto = Double.Parse(tab.Rows[0]["val_produto"].ToString());
                    carregaListaProdutos(objV);
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        #endregion
        #region Métodos do Serviço
        public void carregaListaServico(Venda objV)
        {
            Servicos_VendaBLL objServicoVenda = new Servicos_VendaBLL();
            Servicos_Venda objSV = new Servicos_Venda();
            DataTable tab = null;
            try
            {
                tab = objServicoVenda.localizar(objV);
                objV.lServicos.Clear();
                foreach (DataRow linha in tab.Rows)
                {
                    objSV.cod_servico = int.Parse(linha["cod_servico"].ToString());
                    objSV.cod_venda = int.Parse(linha["cod_venda"].ToString());
                    objSV.qtd_servico = int.Parse(linha["qntd_servico"].ToString());
                    objSV.val_servico = double.Parse(linha["valor_servico"].ToString());
                    objV.lServicos.Add(objSV);
                    objSV = new Servicos_Venda();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            objServicoVenda = null;
            objSV = null;
        }
        public void cadastraServicoVenda(Venda objV)
        {
            Servicos_VendaBLL objServicoVenda;
            try
            {
                foreach (Servicos_Venda obj in objV.lServicos)
                {
                    obj.cod_venda = objV.cod_venda;
                    objServicoVenda = new Servicos_VendaBLL();
                    objServicoVenda.inserir(obj);
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            objServicoVenda = null;
        }
        public void carregaServicos(Venda objV)
        {
            DataTable tab;
            Servicos_VendaBLL objServicoVenda;
            Servicos_Venda objSV;
            try
            {
                objServicoVenda = new Servicos_VendaBLL();
                objSV = new Servicos_Venda();
                tab = objServicoVenda.localizar(objV);
                if (tab.Rows.Count > 0)
                {
                    objSV.cod_servico = int.Parse(tab.Rows[0]["cod_servico"].ToString());
                    objSV.qtd_servico = int.Parse(tab.Rows[0]["qntd_servico"].ToString());
                    objSV.val_servico = Double.Parse(tab.Rows[0]["valor_servico"].ToString());
                    carregaListaServico(objV);
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        #endregion

        #region Métodos
        //inserir
        public void inserir(Venda objV)
        {
            try
            {
                if (objV.cod_cliente == 0)
                    throw new Exception("Campos Obrigatórios Invalidos");
                else
                {
                    objDAL = new VendasDAL();
                    objDAL.inserir(objV);
                    cadastraProdVenda(objV);
                    cadastraServicoVenda(objV);
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            objDAL = null;
        }
        public void alterar(Venda objV)
        {
            try
            {
                if (objV.cod_venda == 0 || objV.cod_funcionario == 0 || objV.cod_cliente == 0)
                    throw new Exception("Campos Obrigatórios não preenchidos");
                else
                {
                    objDAL = new VendasDAL();
                    objDAL.alterar(objV);
                    Produtos_VendaBLL objPV = new Produtos_VendaBLL();
                    Servicos_VendaBLL objSV = new Servicos_VendaBLL();
                    objPV.excluirTodos(objV);
                    objSV.excluirTodos(objV);
                    cadastraProdVenda(objV);
                    cadastraServicoVenda(objV);
                    objPV = null;
                    objSV = null;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            objDAL = null;
        }
        public void excluir(Venda objV)
        {
            try
            {
                if (objV.cod_venda == 0)
                    throw new Exception("Campo obrigatório não preenchido");
                else
                {
                    objDAL = new VendasDAL();
                    Produtos_VendaBLL objPV = new Produtos_VendaBLL();
                    Servicos_VendaBLL objSV = new Servicos_VendaBLL();
                    objPV.excluirTodos(objV);
                    objSV.excluirTodos(objV);
                    objDAL.excluir(objV);
                    objSV = null;
                    objPV = null;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            objDAL = null;
        }
        public Venda localizar(int codigo)
        {
            Venda objV = null;
            try
            {
                objDAL = new VendasDAL();
                objV = objDAL.localizar(codigo);
                carregaProdutos(objV);
                carregaServicos(objV);
            }
            catch (Exception ex)
            {

                throw ex;
            }
            objDAL = null;
            return objV;
        }
        public DataTable localizar(String nome)
        {
            DataTable tab;
            try
            {
                objDAL = new VendasDAL();
                tab = objDAL.localizar(nome);
            }
            catch (Exception ex)
            {

                throw ex;
            }
            objDAL = null;
            return tab;
        }

        #endregion
    }
}
